using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
using Sysgeprava.Entities;

namespace Sysgeprava.Repository.Mapping
{
    public class BOVINOMap : EntityTypeConfiguration<BOVINO>
    {
        public BOVINOMap()
        {
            // Primary Key
            this.HasKey(t => t.Id);

            // Properties
            this.Property(t => t.NroArete)
                .IsRequired()
                .HasMaxLength(10);

            this.Property(t => t.Nombre)
                .IsRequired()
                .HasMaxLength(50);

            this.Property(t => t.LugNac)
                .IsRequired()
                .HasMaxLength(50);

            this.Property(t => t.NroRegistro)
                .IsRequired()
                .HasMaxLength(10);

            this.Property(t => t.NomVendedor)
                .HasMaxLength(100);

            // Table & Column Mappings
            this.ToTable("BOVINO");
            this.Property(t => t.Id).HasColumnName("Id");
            this.Property(t => t.IdBovMadre).HasColumnName("IdBovMadre");
            this.Property(t => t.NroArete).HasColumnName("NroArete");
            this.Property(t => t.Nombre).HasColumnName("Nombre");
            this.Property(t => t.FecNac).HasColumnName("FecNac");
            this.Property(t => t.LugNac).HasColumnName("LugNac");
            this.Property(t => t.NroRegistro).HasColumnName("NroRegistro");
            this.Property(t => t.FecCompra).HasColumnName("FecCompra");
            this.Property(t => t.NomVendedor).HasColumnName("NomVendedor");
            this.Property(t => t.PrecComp).HasColumnName("PrecComp");
            this.Property(t => t.LugComp).HasColumnName("LugComp");
            this.Property(t => t.CantPartos).HasColumnName("CantPartos");
            this.Property(t => t.PesoNac).HasColumnName("PesoNac");
            this.Property(t => t.PesoDest).HasColumnName("PesoDest");
            this.Property(t => t.PesoAct).HasColumnName("PesoAct");
            this.Property(t => t.IndComp).HasColumnName("IndComp");
            this.Property(t => t.IndEnfermedad).HasColumnName("IndEnfermedad");
            this.Property(t => t.IndTratamiento).HasColumnName("IndTratamiento");
            this.Property(t => t.IndCelo).HasColumnName("IndCelo");
            this.Property(t => t.IndPrimerisa).HasColumnName("IndPrimerisa");
            this.Property(t => t.IndPrenes).HasColumnName("IndPrenes");
            this.Property(t => t.IndSecado).HasColumnName("IndSecado");
            this.Property(t => t.IndMuerte).HasColumnName("IndMuerte");
            this.Property(t => t.FecMuerte).HasColumnName("FecMuerte");
            this.Property(t => t.FecUltParto).HasColumnName("FecUltParto");
            this.Property(t => t.IdSexo).HasColumnName("IdSexo");
            this.Property(t => t.IdRaza).HasColumnName("IdRaza");
            this.Property(t => t.IdEtapa).HasColumnName("IdEtapa");

            // Relationships
            this.HasRequired(t => t.BOV_MADRE)
                .WithMany(t => t.BOV_MADRES)
                .HasForeignKey(d => d.IdBovMadre);
            this.HasOptional(t => t.ETAPA)
                .WithMany(t => t.BOVINOes)
                .HasForeignKey(d => d.IdEtapa);
            this.HasOptional(t => t.RAZA)
                .WithMany(t => t.BOVINOes)
                .HasForeignKey(d => d.IdRaza);
            this.HasOptional(t => t.SEXO)
                .WithMany(t => t.BOVINOes)
                .HasForeignKey(d => d.IdSexo);

        }
    }
}
